Vereisten

Voor deze oefening heb je een (gratis) account nodig bij http://www.realtime.co/; als je dit account aanmaakt en een "Realtime Messaging Free" subscription start, kan je daarvan de "Application Key" in de onderstaande variabele opslaan. Deze key wordt verder gebruikt bij het opzetten van de communicatie.

Bovendien heb je tijdens het uitvoeren van deze notebook een verbinding nodig met het internet.


In [ ]:
APPKEY = "******"

We willen de software bibliotheek "RPi.GPIO" gebruiken in onze code
En voor de GPIO pinnetjes zullen we zoals gewoonlijk de BCM nummering gebruiken (cfr nummers op de behuizing)


In [ ]:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)

ortc is een bibliotheek die een verbinding maakt met een realtime communicatiesysteem in de cloud (http://www.realtime.co/)
Dit is te vergelijken met e-mail, Twitter of Facebook Messenger, maar dan voor computers.
"mWvTfc" is de login/paswoord/toegangscode voor het account dat we allemaal tegelijk zullen gebruiken.


In [ ]:
import ortc
oc = ortc.OrtcClient()
oc.cluster_url = "http://ortc-developers.realtime.co/server/2.1"

# Verbinding maken met het gedeelde account
oc.connect(APPKEY)

Met person_pins maken we een lijstje (eigenlijk een "dictionary" oftewel woordenboek) van GPIO pinnen met de bijhorende namen van de personen zodat de computer kan onthouden aan wie elk van de pinnen (en aangesloten deurbellen) toebehoort.


In [ ]:
person_pins = {
    17: "Maleficent",
    27: "BozeWolf",
}

We zullen eens kijken of dit werkt; person_pins[17] moet de waarde geven die hoort bij nummer 17


In [ ]:
print(person_pins[17])

send_message() is een functie met een parameter (die we "pin" hebben genoemd). Via deze parameter kunnen we de uitkomst beïnvloeden; als "pin" gelijk is aan 17, dan zal een "deurbel" boodschap doorgestuurd worden met de naam "Maleficent".


In [ ]:
def send_message(pin):
    oc.send("deurbel", person_pins[pin])

Laatste stukje van de setup: nu gaan we voor elk van de pin waarden in person_pins:

  1. de pin instellen als input
  2. er een event aan koppelen (als de waarde van de pin van 1 op 0 springt -GPIO.FALLING-, moet send_message uitgevoerd worden)

In [ ]:
for pin in person_pins:
    GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
    GPIO.add_event_detect(pin, GPIO.FALLING, send_message, 200)

Tijd om te testen: druk maar op de knop en kijk of je boodschap in de cloud verschijnt!

Volg de volgende procedure om dit te checken:

  • log in op de Realtime website
  • klik op je naam om naar je account te gaan
  • klik op Subscriptions (het winkelkarretje links bovenaan)
  • open de "Realtime Messaging Free" subscription en klik op "Console"
  • voer onder Channel: "deurbel" in en klik op [Subscribe]
  • nu kan je een knop indrukken en zie je de boodschap verschijnen

En weer opkuisen:


In [ ]:
for pin in person_pins:
    GPIO.remove_event_detect(pin)

In [ ]:
GPIO.cleanup()